{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Ejercicio misceláneo: Feature Selection, Modelos predictivos"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. En un filtro antispam ¿prefeririría que sea más alta la presición o la exhaustividad? Justifique su respuesta.\n",
"\n",
"Asuma que el filtro elimina cualquier mensaje que detecte como spam."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"En este caso, **es más importante tener una alta precisión**. Porque una alta precisión significa que el número de falsos positivos es reducido. Es mucho peor tener un falso positivo que un falso negativo. Porque, digamos, si tengo un correo muy importante sobre trabajo y se lo marca como spam, es catastrófico. En cambio, si me llega un correo spam a mi bandeja de entrada, no es algo tan molesto."
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import os\n",
"\n",
"from sklearn.metrics import accuracy_score, confusion_matrix, precision_score, recall_score, f1_score\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.linear_model import LogisticRegression"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Pregnancies \n",
" Glucose \n",
" BP \n",
" Skin Thickness \n",
" Insulin \n",
" Mass \n",
" Pedigree \n",
" Age \n",
" class \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 6 \n",
" 148 \n",
" 72 \n",
" 35 \n",
" 0 \n",
" 33.6 \n",
" 0.627 \n",
" 50 \n",
" 1 \n",
" \n",
" \n",
" 1 \n",
" 1 \n",
" 85 \n",
" 66 \n",
" 29 \n",
" 0 \n",
" 26.6 \n",
" 0.351 \n",
" 31 \n",
" 0 \n",
" \n",
" \n",
" 2 \n",
" 8 \n",
" 183 \n",
" 64 \n",
" 0 \n",
" 0 \n",
" 23.3 \n",
" 0.672 \n",
" 32 \n",
" 1 \n",
" \n",
" \n",
" 3 \n",
" 1 \n",
" 89 \n",
" 66 \n",
" 23 \n",
" 94 \n",
" 28.1 \n",
" 0.167 \n",
" 21 \n",
" 0 \n",
" \n",
" \n",
" 4 \n",
" 0 \n",
" 137 \n",
" 40 \n",
" 35 \n",
" 168 \n",
" 43.1 \n",
" 2.288 \n",
" 33 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Pregnancies Glucose BP Skin Thickness Insulin Mass Pedigree Age \\\n",
"0 6 148 72 35 0 33.6 0.627 50 \n",
"1 1 85 66 29 0 26.6 0.351 31 \n",
"2 8 183 64 0 0 23.3 0.672 32 \n",
"3 1 89 66 23 94 28.1 0.167 21 \n",
"4 0 137 40 35 168 43.1 2.288 33 \n",
"\n",
" class \n",
"0 1 \n",
"1 0 \n",
"2 1 \n",
"3 0 \n",
"4 1 "
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"diabetes_df = pd.read_csv(os.path.join(\"datasets\",\"diabetes.csv\"))\n",
"diabetes_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['Pregnancies',\n",
" 'Glucose',\n",
" 'BP',\n",
" 'Skin Thickness',\n",
" 'Insulin',\n",
" 'Mass',\n",
" 'Pedigree',\n",
" 'Age']"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"VARIABLES_INDEPENDIENTES = list(diabetes_df.columns[:-1])\n",
"VARIABLES_INDEPENDIENTES"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2 Feature selection\n",
"\n",
"En el siguiente problema de clasificación. Determine el porcentaje adecuado de variables aplicando la Información mutua. El valor a partir de cual un incremento en el mismo no incrementa significativamente el desempeño del clasificador (2% o menos)"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.feature_selection import mutual_info_classif, SelectPercentile\n",
"\n",
"def seleccionar_variables(X, Y, porcentaje):\n",
" X_as_float = X.astype(np.float64)\n",
" select_features = SelectPercentile(mutual_info_classif, porcentaje)\n",
" X_new = select_features.fit_transform(X_as_float, Y)\n",
" return X_new"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {},
"outputs": [],
"source": [
"def datos_performance(performance_clasificador): \n",
" exactitud = [performance_clasificador[key]['exactitud'] for key in performance_clasificador]\n",
" nro_variables = list(range (1, 100, 10))\n",
" return pd.DataFrame(data={'exactitud' : exactitud}, index = nro_variables)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import accuracy_score, confusion_matrix, precision_score, recall_score, f1_score\n",
"\n",
"def evaluar_clasificador(variable_dependiente, \n",
" variables_independientes, \n",
" data_frame,\n",
" porcentaje):\n",
" \n",
" Y = data_frame[variable_dependiente] \n",
" X = seleccionar_variables(data_frame[variables_independientes], Y, porcentaje)\n",
" X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)\n",
" \n",
" clasificador = LogisticRegression(solver = 'liblinear')\n",
" clasificador.fit(X_train, Y_train)\n",
"\n",
" return {'exactitud': accuracy_score(Y_test, clasificador.predict(X_test)), \n",
" 'precision' : precision_score(Y_test, clasificador.predict(X_test)),\n",
" 'exhaustividad' : recall_score(Y_test, clasificador.predict(X_test))}"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [],
"source": [
"performance_clasificador = {}\n",
"\n",
"for i in range (1, 100, 10):\n",
" performance_clasificador['mutual_info_classif percentile - ' + str(i)] = evaluar_clasificador('class',\n",
" VARIABLES_INDEPENDIENTES,\n",
" diabetes_df,\n",
" i)"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" exactitud \n",
" \n",
" \n",
" \n",
" \n",
" 1 \n",
" 0.772727 \n",
" \n",
" \n",
" 11 \n",
" 0.779221 \n",
" \n",
" \n",
" 21 \n",
" 0.746753 \n",
" \n",
" \n",
" 31 \n",
" 0.766234 \n",
" \n",
" \n",
" 41 \n",
" 0.720779 \n",
" \n",
" \n",
" 51 \n",
" 0.740260 \n",
" \n",
" \n",
" 61 \n",
" 0.746753 \n",
" \n",
" \n",
" 71 \n",
" 0.792208 \n",
" \n",
" \n",
" 81 \n",
" 0.766234 \n",
" \n",
" \n",
" 91 \n",
" 0.746753 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" exactitud\n",
"1 0.772727\n",
"11 0.779221\n",
"21 0.746753\n",
"31 0.766234\n",
"41 0.720779\n",
"51 0.740260\n",
"61 0.746753\n",
"71 0.792208\n",
"81 0.766234\n",
"91 0.746753"
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = datos_performance(performance_clasificador)\n",
"df.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 95,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxU5fX48c/JThLIHpYkkJAEZF8SUSFhcUHcWCy2UPurtt+6tXaxta21LmhRu9ivra3VUrvYb1upUlCqKCgIJIBA2GQnQ9jCmkkIJJB9nt8fmWCAhExg9jnv1ysvMvfeuXMy3Jzcee65zxFjDEoppfxXkKcDUEop5Vqa6JVSys9poldKKT+niV4ppfycJnqllPJzIZ4O4EKJiYkmPT3d02EopZRP2bBhg9UYk9TWOq9L9Onp6RQVFXk6DKWU8ikicqC9dTp0o5RSfk4TvVJK+TlN9Eop5ee8boy+LQ0NDZSWllJbW+vpUHxaREQEqamphIaGejoUpZQb+USiLy0tpWvXrqSnpyMing7HJxljKC8vp7S0lIyMDE+Ho5RyI58YuqmtrSUhIUGT/BUQERISEvRTkVIByCcSPaBJ3gn0PVQqMPlMoldK+Zeq2gbmrjtIk02nSnc1TfReYPny5axevfrc49dee42///3vAPztb3/jyJEjnd5neno6VqvVaTEq5WxvrjvIY/O38v7Wo54Oxe9povcCFyb6Bx98kK9+9avA5Sd6pbxdQXHziciry/eiDZBcSxN9J/zjH/9g1KhRDB8+nAceeIADBw6QnZ2N1WrFZrORn5/PkiVLAJg6dSo5OTkMGjSIOXPmnNvHhx9+yMiRIxk2bBg33HAD+/fv57XXXuOll15i+PDhFBQUMGvWLF588UXmzZtHUVERd999N8OHD6empua8M/WioiLGjx8PQHl5ORMnTmTEiBE88MAD+oujvFptQxPr91eQEtuFnUdPs3xPmadD8msOlVeKyCTgt0Aw8Lox5ucXrH8JmGB/GAkkG2Ni7et+AdxmX/czY8y/ryTgZ/67nR1HTl/JLi4ysFc3nr5j0CW32blzJ//+979ZtWoVoaGhfPOb32TFihX8+Mc/5sEHH+Saa65h4MCBTJw4EYC//OUvxMfHU1NTw9VXX80XvvAFbDYb9913HytXriQjI4OKigri4+N58MEHiY6O5tFHHwVg6dKlAEyfPp3f//73vPjii+Tm5l4yvmeeeYa8vDyeeuop3n///fP+uCjlbTYeOEltg40nbx/Is//dzqvL9zKhf7Knw/JbHSZ6EQkGXgFuAkqB9SKy0Bizo2UbY8wjrbb/NjDC/v1twEhgOBAOrBCRD4wxzs3UbrB06VI2bNjA1VdfDUBNTQ3JycnMmjWLt99+m9dee43Nmzef2/7ll19mwYIFABw6dIji4mLKysoYO3bsuTr2+Ph4p8W3cuVK5s+fD8Btt91GXFyc0/atlLMVWKyEBAl52Yl8I78vz763gw0HKsjp47zfCfU5R87oRwEWY0wJgIjMBaYAO9rZfibwtP37gcAKY0wj0CgiW4BJwFuXG3BHZ96uYozhnnvu4YUXXjhv+dmzZyktLQWgurqarl27snz5cj7++GPWrFlDZGQk48ePp7a2FmPMFZc4hoSEYLPZAC6qidfySeUrCoutjOgdS3R4CDNGpfG7ZcW8unwvr9+jid4VHBmjTwEOtXpcal92ERHpA2QAy+yLtgC3iEikiCTSPLyT1sbz7heRIhEpKivzzrG6G264gXnz5nHixAkAKioqOHDgAD/+8Y+5++67efbZZ7nvvvsAOHXqFHFxcURGRrJr1y4+/fRTAK677jpWrFjBvn37zu0DoGvXrlRVVbX5uheuS09PZ8OGDQD85z//Obd87Nix/POf/wTggw8+4OTJk8788ZVympNn6tl25BR5Wc1Tp0eGhXDv6Aw+3nmC3cfa/j1QV8aRRN/WaWJ7V/pmAPOMMU0AxpglwCJgNfAmsAZovGhnxswxxuQaY3KTktqcN9/jBg4cyOzZs5k4cSJDhw7lpptuYv/+/axfv/5csg8LC+Ovf/0rkyZNorGxkaFDh/Lkk09y7bXXApCUlMScOXO48847GTZsGF/60pcAuOOOO1iwYMG5i7Gt3XvvvTz44IPnLsY+/fTTfPe73yU/P5/g4OBz2z399NOsXLmSkSNHsmTJEnr37u2+N0epTli114oxkJedeG7ZPaP7EBkWzGsr9nowMv8lHVVniMh1wCxjzM32xz8BMMa80Ma2m4BvGWNWX7jOvv5fwD+MMYvae73c3FxzYeORnTt3MmDAgA5+FOUIfS+Vp/1k/me899lRNj15EyHBn59rzn5vB39dvZ/lj44nLT7SgxH6JhHZYIxps2rDkTP69UC2iGSISBjNZ+0L23iR/kAczWftLcuCRSTB/v1QYCiwpPM/glLKHxhjKCi2cl3fhPOSPMA38vsSJPCnghIPRee/Okz09gupDwOLgZ3AW8aY7SLyrIhMbrXpTGCuOf8jQihQICI7gDnAV+z7U0oFoAPlZyk9WUN+q2GbFj1iIrhzRCr/Xn8Ia3WdB6LzXw7V0duHWhZdsOypCx7PauN5tTRX3lwxZ1SsBDq9iUp5WoGl+Wa/MVkXJ3qAB8b15a0Nh/jrqn388Oar3BmaX/OJO2MjIiIoLy/XRHUFWuajj4iI8HQoKoAVFpeREtuFjMSoNtf3TYrmlsE9+PuaA1TVNrg5Ov/lE41HUlNTKS0txVtLL31FS4cppTyhscnG6r3l3Dq45yU/nT80LotFW4/xz7UHeXBcphsj9F8+kehDQ0O1K5JSPm7r4VNU1TaeV1bZliGpMeRnJ/Lnwn3cOzqdiNDgS26vOuYTQzdKKd9XWGxFpP3x+dYeGpdJWVUd8zcedkNk/k8TvVLKLQosVgb16kZ8VFiH216XmcCwtFj+uHIvjU02N0Tn3zTRK6Vc7kxdI5sOnnTobB6a5216aFwmB8rP8sG2Yy6Ozv9poldKudzafeU0NBnysxyf4mTiwO5kJkXxB21McsU00SulXK6g2Ep4SBC56Y5Pnx0UJDw4LpOdR0+zQhuTXBFN9Eopl1tlsTIqI77TFTRThqfQMyaCPyzXyc6uhCZ6pZRLHT9dy57j1eQ5OD7fWlhIEPfl92Xdvgo2HKhwQXSBQRO9UsqlCu1NwDuqn2/PjFFpxEWG8upynezscmmiV0q5VKHFSkJUGAN6dLus53/emOS4Nia5TJrolVIuY4yh0GJldFYiQUGXPylhS2OSP2pjksuiiV4p5TJ7jldTVlVH/mWMz7cWGxnGl0f15t0tRzhUcdZJ0QUOTfRKKZcpKG4ui7zc8fnW/ic/gyCB17UxSadpoldKuUyhxUrfpCh6xXa54n31jOnCtBEpzNXGJJ2miV4p5RJ1jU2sLam44mGb1h4Yl0l9k42/rdrvtH0GAk30SimX2HigkpqGJofnt3FEZlI0kwb14O9r9mtjkk7QRK+UcolCSxnBQcK1mQlO3e9D4zM5XdvIv9YedOp+/ZlDiV5EJonIbhGxiMhjbax/SUQ227/2iEhlq3W/FJHtIrJTRF4WbfyqVEAotJQzPC2WbhGhTt3v0NRY8rISeb1wH7UNTU7dt7/qMNGLSDDwCnALzY2+Z4rIeQ2/jTGPGGOGG2OGA78D5tufOxoYAwwFBgNXA+Oc+hMopbzOqbMNbC2tvKxpDxzxzfHamKQzHDmjHwVYjDElxph6YC4w5RLbzwTetH9vgAggDAgHQoHjlx+uUsoXrN5rxWYg3wlllW25LjOBYakx/HHlXppsOoVxRxxJ9CnAoVaPS+3LLiIifYAMYBmAMWYN8Alw1P612Bizs43n3S8iRSJSpA3AlfJ9BRYr0eEhDEuLdcn+RYSHxjc3Jlm09ahLXsOfOJLo2xpTb+9P6AxgnjGmCUBEsoABQCrNfxyuF5GxF+3MmDnGmFxjTG5SkuONCbyR5UQ1ry7fq2OHKqAVFlu5tm88ocGuq/eYOLAHfZOieFUbk3TIkf+FUiCt1eNU4Eg7287g82EbgGnAp8aYamNMNfABcO3lBOrtjlTW8KN5W5j40gp+8eEu/rOx1NMhKeURB8vPcrDirMvG51u0NCbZoY1JOuRIol8PZItIhoiE0ZzMF164kYj0B+KANa0WHwTGiUiIiITSfCH2oqEbX1Zxpp7Z7+1g/IvLeWfTEb42JoPs5GjeLtJErwJToaVlWmLXfzqfam9M8qo2JrmkDhO9MaYReBhYTHOSfssYs11EnhWRya02nQnMNed/hpoH7AW2AluALcaY/zoteg86U9fIy0uLGfvLT/jLqn1MGdaLT344nidvH8iXrk5j86FKLCd0SlUVeAotZfSMiSAzKcrlrxUWEsQ38vuydl8FGw6cdPnr+SrxtrGt3NxcU1RU5Okw2lXfaONfaw/w+08sWKvruXlQdx6d2J/s7l3PbVNWVce1Lyzlvvy+PHbLVR6MVin3arIZRv7sIyYO7M6v7hrmltc8W9/I6J8vI7dPPK/fk+uW1/RGIrLBGNPmGxDi7mB8VZPNsHDLYX69ZA+lJ2u4tm88c756FSN7X9zsOKlrOBP6JzN/YymPTuxHiAsvSCnlTbYdPsWpmganzFbpqObGJOn85uNi9hyvol+rky7VTDNQB4wxLN15nNteLuCRf28hpksof//6KN6879o2k3yL6TmpnKiqo8A+XqlUIGgZn3fm/DaOuOe6dCLDgnlNx+rbpIn+Etbtq+Cu19bwP28UUdvQxO+/PIL/PpzH2H5JdDSTw/VXJRMfFcY8vSirAkhBcRkDenYjMTrcra8bFxXGTHtjktKT2pjkQpro27DjyGm+9td1fPGPazhYcZbnpg3mo++P4/ahvRxuhxYWEsSU4b34aMdxKs/WuzhipTzvbH0jGw9Uuuxu2I58w96Y5E8rtTHJhTTRt3Kw/CzfnbuJ235XwIYDJ3nslqtY8cMJ3H1Nn8u68WN6Tir1TTb+u6W92w6U8h/r9lVQ32Rzef18e7QxSfs00QMnqmp56t1tXP/r5SzefoyHxmVS8KPreXBcJl3Cgi97v4N6xTCwZzfe3qDDN8r/FRZbCQsJYlRGvMdiaGlM8sbq/R6LwRsFdNXN6doG5qwo4c+F+2hosjFjVBrfuT6b5G4RTnuN6TmpPPveDnYfq6J/D60GUP6r0GIlt08cEaGXf3J0pVoak7yxej/3j+1LVydPkeyrAvKMvrahiTkr9zL2l5/w+08s3DiwOx9/fxyzpw5xapIHmDK8FyFBolMiKL92oqqWXceq3FpW2Z6WxiRvrtPGJC0C6oy+scnGvA2l/ObjYo6drmVcvyR+eHN/BqfEuOw1E6LDuWFAMvM3HuaHN/d36SRPSnnKaks5APlZnp+U8FxjkoJ93DM6nfAQz33C8BYBkXWMMSzaepSJL63ksflb6RkbwZv3XcsbXx/l0iTfYnpOGtbqOlbqxEvKTxUUW4mLDGVQr26eDgVoPqs/oY1JzvH7M/rCYiu/+HAXWw+fIjs5mjn/L4ebBnbvsA7emcb3TyIxOox5G0q5YUB3t72uUu5gjKHQUsborESHy49dbXRmAkNTY/jjir18MTeNYC+Jy1P89ox+y6FK7n79U77y57VUnKnnxbuG8eH3xjJxUA+3JnmA0OAgpg5P4eOdx6k4ozX1yr9YTlRz/HQd+R4qq2yLiPDN8ZnsLz/LB9u0MYnfJXrLiWoe+scGpryyip1Hq3jq9oEse3Qc03NSPfpX/Qs5qTQ0GRZu1o+Syr8UFHtm2oOOaGOSz/lNoi+vruPH8z5j4ksrWLmnjO/dmM3KH03g63kZXnExZkDPbgxO6cY8rb5RfqbQYiU9IZK0+EhPh3KelsYk24+cZmVxYM855TeJPiQoiKW7TnDv6AxW/mgC37uxH9Hh3nUJ4q6cNLYdPs3Oo6c9HYpSTtHQZOPTknKvKKtsy+eNSSyeDsWj/CbRx0SGUvjjCTx1x0AS3DyhkqMmD+tFaLAwT++UVX5i08FKztY3kecFZZVtaWlM8mlJBRsPBm5jEr9J9IBH78hzRFxUGDcO6M47mw7T0GTzdDhKXbHC4jKCBK7LTPB0KO2acXUasZGhAd1u0K8SvS+4KzeV8jP1fLLrhKdDUeqKFVisDEuLJaaL9041EBUewj3XpfPRjuPsOR6Y7T010bvZ2OwkEqPDdfhG+bxTNQ1sOVTpsdkqO+Pe0el0CQ3mtRWBeVbvUKIXkUkisltELCLyWBvrXxKRzfavPSJSaV8+odXyzSJSKyJTnf1D+JKQ4CDuHJnCsl0ndCpV5dPW7C3HZvCJRN/SmGTh5sBsTNJhoheRYOAV4BZgIDBTRAa23sYY84gxZrgxZjjwO2C+ffknrZZfD5wFljj5Z/A503NSabQZ3t2s89Qr37XKYiUyLJgRl2ip6U3uG5uBCLxesM/TobidI2f0owCLMabEGFMPzAWmXGL7mcCbbSyfDnxgjAm8P6cX6Ne9K8NSY3T4Rvm0QouVa/smEBbiGyPAPWO6MHV4CnPXH6Q8wD5NO/I/lAIcavW41L7sIiLSB8gAlrWxegZt/wFARO4XkSIRKSorC4yJv6bnpLLz6Gm2HT7l6VCU6rTSk2fZZz3jE8M2rT0wLpO6Rht/C7DGJI4k+rbmDWjvfuIZwDxjTNN5OxDpCQwBFrf1JGPMHGNMrjEmNynJO+txnW3ysBTCgoP0rF75pEL7nabeeqNUe7KSo7l5YHNjkuq6Rk+H4zaOJPpSIK3V41SgvcHl9s7avwgsMMY0dC48/xUTGcpNg7rz7ubD1DdqTb3yLQUWK927hZOdHO3pUDqtpTHJv9Ye8HQobuNIol8PZItIhoiE0ZzMF164kYj0B+KANW3so71x+4A2PSeVk2cbWLbruKdDUcphNpthtcXKmKxEt88E6wzD0mIZk5XA6wX7qGts6vgJfqDDRG+MaQQepnnYZSfwljFmu4g8KyKTW206E5hrLpgmTkTSaf5EsMJZQfuLsdlJdO+mNfXKt+w4epqTZxvI97Fhm9YeGpcVUI1JHJr1yxizCFh0wbKnLng8q53n7qedi7eBLjhImDYilT8VlFBWVUdSV++co0ep1rx1WuLOGJMVWI1JfKMuyo9Nz0mlyWZ4Z1NgnFko31doKeOqHl1J7hrh6VAum4jw0LjmxiQfbjvm6XBcThO9h2UlRzOidyzzNpQGfHME5f1qG5pYv/+kT5/Nt7h5UHNjkj8st/j9754mei8wPSeV3cer2HZY56lX3m3dvgrqG20+V1bZlqAg4cGxzY1JCvy8MYkmei9w+9BehIcE8faGQx1v7GNWW6z8e/1BT4ehnGSVxUpYcBDXZMR7OhSnmDoihR7dInjlE/8+q9dE7wViuoRy86AevLv5iF+Ve1Wcqedb/9rIk+9up7bBf36uQFZQbGVkn1giw7yre9vlCgsJ4qHxmazdV8Girf47Vq+J3ktMz0nlVE0DH+/wn3nqZ7+/g5NnG6hvtLF+f4Wnw1FXyFpdx46jp8nP9q+71+++pjeDU7ox67/bOV3rn/d0aqL3EmOyEukZE8E8Pxm+WW2xMn/jYb4+JoPQYDl3y7zyXass9mkP/OBCbGshwUG8MG0o5dV1/PLDXZ4OxyU00XuJ4CDhzpEprNhTxonTtZ4O54rUNjTx03e2kZ4QyY8m9Wdk7zi/v9gVCAqLrcR0CWVwSoynQ3G6Iakx3Ds6g3+uPciGA/7XW1YTvRf5wshUbAbm+3hN/R8+sbDPeobZU4cQERpMXlYiO46eDripYf2JMYZCi5XRmQl+e3PRDyb2o2e3CB6fv9XvejprovcifZOiye0T59M19cXHq3h1xV6mjUg5V4LX8u+qveWeDE1dgRLrGY6eqvWLssr2RIWH8MyUwew+XsWfCko8HY5TaaL3MtNzUrGcqGZLqe/NU2+zGR5fsJWo8BCeuG3AueVDU2PpFhFCYXFg9BrwRy3XWPKz/OtC7IVuGtidSYN68NuPizlY7j89kjTRe5nbhvYkIjSIt4t876LsW0WHWL//JI/fOoCE6M/n7QkOEkZnJlJYbPXZTyqBrqDYSu/4SHonRHo6FJebNXkQocFB/PSdrX5zvGqi9zJdI0K5ZXBPFm454lO152VVdTy/aCfXZMRzV07qRevzshM5cqqWEusZD0SnrkRDk41PS8r9etimtR4xEfzw5v4UFFtZuMU/+jprovdC03NSqapt5KMdvjNP/ez3d1DbYOO5aUPanKO8ZUpbLbP0PVsOVVJd1+h3ZZWX8pVr+zAsLZafvbeDyrP1ng7nimmi90LX9U0gJbYLb/vIPPUr9pTx7uYjPDQ+k6x2Og71jo8kNa4LhRZN9L6moNiKCIzOTPB0KG4THCS8MG0IJ8828PMPfL+2XhO9FwoKEr4wMoXC4jKOnfLumvqa+iaeeGcrfROj+OaEzHa3ExHysxP5dG85jX5WuubvVlmsDE2JITYyzNOhuNXAXt34Rl4Gc9cfYt0+376zWxO9l/pCTktNvXef1b+8rJhDFTU8N20I4SHBl9w2LyuJqrpGtpRWuik6daWqahvYdKgyYMbnL/TdG7NJjevC4wu2+vQ8VJrovVSfhChGpcczr8h7a+p3HTvNn1aWcFdOKtc58LF+dGYCIuhdsj7k05IKmmyGPD8vq2xPZFgIP5s6GMuJav64wndr6x1K9CIySUR2i4hFRB5rY/1LIrLZ/rVHRCpbrestIktEZKeI7LD3kFUOmJ6bSon1DBsPet8ZsM1m+Mn8rXTrEsrjtw7o+AlAXFQYQ1Ji9IKsDyksLqNLaDAj+8R6OhSPmdA/mduH9uT3n1goKav2dDiXpcNELyLBwCvALcBAYKaIDGy9jTHmEWPMcGPMcOB3wPxWq/8O/MoYMwAYBfjP9IwuduuQnnQJDfbK5uH/XHeQTQcreeK2AcRFOT52m5eVyKZDlVT56SyB/qbAYmVURnyHw3L+7qk7BhIeEsRPF2zz2k/Yl+LIGf0owGKMKTHG1ANzgSmX2H4m8CaA/Q9CiDHmIwBjTLUxxn9uN3Ox6PAQbhnSg/e2HKGm3nvGB4+fruWXH+xiTFYC00Z0ru97XlYiTTbD2hLfvrgVCI5U1lBSduZcaWwgS+4awWO3XMWaknLmb/S9uagcSfQpQOvbNEvtyy4iIn2ADGCZfVE/oFJE5ovIJhH5lf0TwoXPu19EikSkqKxMb5Nv7a6cNKrqGlmyw3uaIjz73x3UNdmYPbXtmvlLyUmPIyI0SMssfUDL/1GgXoi90Myre5PTJ47Z7++g4oxv1dY7kujb+k1u77PLDGCeMabl9DMEyAceBa4G+gL3XrQzY+YYY3KNMblJSYF50ac912TEkxrXhbeLvGP4Ztmu47y/9SjfuT6LjMSoTj8/PCSYURkJFOi8N16vsNhKUtdw+nfv6ulQvEJQkPD8tCFU1Tby3Ps7PR1OpziS6EuBtFaPU4H27guegX3YptVzN9mHfRqBd4CRlxNooGquqU9l1V4rhytrPBrL2fpGnnxnO9nJ0dw/tv2a+Y7kZyWyt+wMR0959udR7bPZDKssVvKyEjv9qc2f9e/RlQfG9eU/G0tZvdd3PpU6kujXA9kikiEiYTQn84UXbiQi/YE4YM0Fz40TkZbT9OuBHVcWcuCZnpOKMbBgo2fP6l/6aA+HK2t4/s4hhIVcfmVuy1CAlll6r53HTlN+pp4xATTtgaO+fX02fRIi+emCbT4zH1WHv632M/GHgcXATuAtY8x2EXlWRCa32nQmMNe0uiRtH8J5FFgqIltpHgb6kzN/gECQFh/JtX3jPTpP/bbDp/jLqv3MHNWbq9Pjr2hf/bt3JTE67FxrOuV9WkpgA2l+G0dFhAbz3NQh7LOe4Q/L93o6HIc41MrdGLMIWHTBsqcueDyrned+BAy9zPiU3fScNB59ewtFB05ecaLtrCb7PPNxkWE8NumqK95fUJAwJiuRVRYrNpshyE87FvmyQouV7ORoesREeDoUr5SXnci0ESm8utzC5GE9yUr27usYemesj7h1SA+iwoKZ54GLsn9fs5/PSk/x1B0DiYkMdco+87ISsVbXs+tYlVP2p5yntqGJdfsqtNqmAz+9bQBR4SE8Pn8bNpt319ZrovcRkWEh3DqkJ+99doSz9Y1ue92jp2p4cfFuxvZL4o6hPZ223/zs5ss2hRatvvE2Gw6cpK7RpvXzHUiMDufxWwawbn8Fb2/w7kZBmuh9yF25aZypb+LDbe6rqX/63e00GcNzUwc7tfqiR0wEWcnRekHWCxUUWwkJEq7JCJxpiS/XXbmpjMqI5/lFu7BW13k6nHZpovchV6fH0Ts+0m1TIizefowlO47zvRv7kRbv/BZyeVmJrNtX4TOVC4Gi0FLGyN5xRIU7dAkvoIk019bX1Dcx+z3vLSjURO9DRITpOams3lvOoQrXziRRXdfI0+9u56oeXfmfvAyXvEZeViJ1jTY2Hjjpkv2rzqs4U8/2I6d1fL4TspKjeWh8Ju9sPuK1NwJqovcxX8hJRQSXz7fx4uLdHK+q5fk7hxAa7JrD5NrMBEKChAIts/Qaq/daMUanPeish8Zn0jcxip8u2OZV81K10ETvY1JiuzA6M4F5Gw+57Er/lkOVvLFmP1+5pg8je8e55DWgedK2Eb1jddpiL1JYbKVrRAhDU2I8HYpPiQgN5rlpQzhYcZbfLSv2dDgX0UTvg6bnpHKoooZ1+50/A2Rjk42fzN9KUnQ4P5zU3+n7v1BeVhLbjpzipI9NEuWPjDEUFFsZnZlAiIs+xfmz6zITmJ6TypyVJew6dtrT4ZxH/zd90KRBPYkOD3HJRdm/rd7PjqOnmTV5EN0inFMzfyl52YkYA6t8aN4Qf7W//CyHK2vIy9aJBS/XT28d0NyMZ/5Wr6qt10Tvg7qEBXP70J4s2nqUM3XOq6kvPXmWXy/Zww1XJXPL4B5O2++lDEuNoWt4iE6H4AUK7RcSddqDyxcXFcYTtw1g48FK/rXuoKfDOUcTvY+anpPK2fomFm096pT9GWN46t3tiMCzTq6Zv5SQ4CCuzUygoNjqk517/ElBsZWU2C6kJzi/lDaQTBuRwpisBH7x4S5OnKSvq+4AABkISURBVK71dDiAJnqfldMnjozEKKcN33yw7RjLdp3g+zf1IyW2i1P26aj87ERKT9ZwoFybj3lKY5ONNSXl5GfrtMRXSkSYPXUIdY02nvGS2npN9D6qpaZ+7b4KDl5hgjxd28CshdsZ1Ksb945Od06AndAyVKBllp7z2eFTVNU2almlk2QkRvHtCVm8/9lRPtnl+TbZmuh92LQRKYjAvCucp/5XH+7GWl3HC3cO8Ui1RUZiFCmxXc6NESv3Kyy2IgJjMjXRO8sD4zLJSo7miXe2uXV+qrZoovdhvWK7kJeVyH82lF72Ff4NB07yj7UHuGd0OkNTY50coWNEhLysRFbvLaexyeaRGAJdYbGVwb1iiIsK83QofiMsJIgX7hzC4coafvOxZ2vrNdH7uOk5qRyurOHTkvJOP7ehycbj87fSo1sEP5jo+pr5SxmTnUhVbSNbD5/yaByBqLqukY0HT2o3KRe4Oj2emaPS+HPhPrYf8dyxrYnex908qAddIy6vpv71gn3sPl7FM5MHEe3hCazGZDbPlKh3ybrfun3lNNqMTkvsIo9NGkBcZHNtfZOHaus10fu4iNBg7hjWi0XbjlJV2+Dw8w6Wn+W3S/dw86DuTBzknpr5S0mIDmdQr256QdYDCoqthIcEkdPHddNdBLKYyFCevH0gW0pP8X9r9nskBk30fmB6Tiq1DTaHa+qNMTzx7jZCgoKYNXmQi6NzXF52IpsOnnTqTWCqY4XFVkZlxBMRGuzpUPzW5GG9GNsviReX7OHoqRq3v75DiV5EJonIbhGxiMhjbax/SUQ227/2iEhlq3VNrdYtdGbwqtmItFj6JjleU79wyxFW7inj0Yn96Bnj3pr5S8nPSqKhybB2X+evN6jLc+xULcUnqnXYxsVEhNlTBtNoszFr4Xa3v36HiV5EgoFXgFuAgcBMERnYehtjzCPGmOHGmOHA74D5rVbXtKwzxkx2YuzKTkS4KyeN9ftPst965pLbVp6t52fv7WBYagz/77p09wTooNz0OMJDgigs1kTvLoX2obK8LJ3fxtV6J0Ty3Rv6sXj7cZZsd1+XOHDsjH4UYDHGlBhj6oG5wJRLbD8TeNMZwSnHTRuRQpDQ4Vn9Lz7cxcmzDTx/5xCCg7zrDsiI0GCuTo/XPrJuVFhcRkJUGFf16OrpUALCN/IzuKpHV55euJ1qNw5ROpLoU4DWnW9L7csuIiJ9gAxgWavFESJSJCKfisjUdp53v32borIy/SW/HD1iIsjPTuI/G0vbvbK/bl8Fb647xP/kZTCol3fON56Xncie49Uc95I5QvyZMYZCSzljshIJ8rI/+v4qNDiI5+8cwrHTtfx6yW63va4jib6tI6C9GqEZwDxjTOsWK72NMbnAl4HfiEjmRTszZo4xJtcYk5uUpB8hL9dduakcPVXLmr0XD33UN9p4fMFWUmK78L0bsz0QnWNapkPQMkvX2328Cmt1nU574GYje8fxlWv68Mbq/XxWWtnxE5zAkURfCqS1epwKHGln2xlcMGxjjDli/7cEWA6M6HSUyiE3DuhOt4gQ3t5w6KJ1f1yxF8uJamZPHUxkmPc2fR7YsxsJUWHnxo6V67T8MdULse73w0n9SYwO5yfzt7rlbnBHEv16IFtEMkQkjOZkflH1jIj0B+KANa2WxYlIuP37RGAM4B3TufmhiNBgJg/vxYfbjnG6VU19SVk1v/vEwm1DejLhqmQPRtixoCBhdFYihRadttjVCoqtZCZFeVXlVaDoFhHKrMmD2H7kNH9bvd/lr9dhojfGNAIPA4uBncBbxpjtIvKsiLSuopkJzDXn/3YOAIpEZAvwCfBzY4wmehe6KyeNukYb721prqk3xvDEO9sIDwni6TsGdvBs75CflUhZVR17jld7OhS/VdfYxNp95dpkxINuGdyDG65K5tdL9lB60rVTdDtUR2+MWWSM6WeMyTTGPGdf9pQxZmGrbWYZYx674HmrjTFDjDHD7P/+2bnhqwsNTY0hOzmaefbhm/kbD7N6bzk/nnQVyd0iPBydY8bYhxIKdDZLl9lw4CS1DTZtG+hBIsIzU5pvWHz63e0u/QSrd8b6mZZ56jcerGTDgQpmv7+Dkb1j+fKo3p4OzWEpsV3omxil4/QutMpiJThIuLZvvKdDCWipcZH8YGI/lu46wYfbXFdbr4neD00bkUJwkHDvX9dTVdvI83cO8bnyubzsRNaWVFDX2NTxxqrTCoutjEiLpasbGsCrS7t3dDqDenXj6YXbz7u25kya6P1QcrcIxvVLoqq2kfvG9uWqHt08HVKn5WUlUtPQxMYD7ik/CyRr9pbz2eFTWlbpJUKCm+ett1bX8asPXVNb7711duqKfGtCJlHhIXzneu+tmb+UazMTCA4SCi1lXGefwlhdme1HTvGrxbtZvruMHt0imDaizfselQcMTY3lntHpVNc2YrMZp38C10Tvp3L6xJPTx3fHX7tFhDIsNYZCSzk/vNnT0fi2/dYz/O9He1i45QgxXUL5yS1Xcc/odJ2t0ss8edtAlw2xaqJXXisvO4nfLyvm1NkGYiJ1LLmzTpyu5eVlxcxdd4jQ4CC+NSGT+8dmEtNF30tv5MrraJroldfKz07k5aXFrN5r5ZYhPT0djs84VdPAH1fs5S+r9tHYZJg5qjffvj7LZ8prlfNpoldea3haLNHhIRRYNNE7oqa+iTfW7OfV5Xs5VdPAlOG9+P5N/eiTEOXp0JSHaaJXXis0OIhr+8brBGcdaGiy8XZRKb9duofjp+uY0D+JR2/u77UzlCr300SvvFpeViIf7zzBwfKz9E6I9HQ4XsVmMyzadpRfL9nDPusZcvrE8fKMEVzTV6uU1Pk00Suv1lLrXWix8uUE37m715WMMRQUW/nl4l1sO3ya/t278vpXc7lhQDIivnVjnHIPTfTKq2UmRdOjWwSFljK+fI0m+k0HT/LLD3ezpqSc1Lgu/O8XhzFleIrXdQtT3kUTvfJqIkJediIf7ThOk80EbEKznKjiV4t3s3j7cRKiwph1x0BmXtOb8BCthVcd00SvvF5+diLzNpSy7fAphqXFejoctzpcWcNvPtrDfzaWEhkWwvdv6sfX8zKIDtdfXeU4PVqU1xuT9fk4faAk+ooz9bzyiYX/W3MAgK+PyeCbE7KIjwrzcGTKF2miV14vMTqcAT27UVhs5VsTsjwdjktV1zXy54J9/KmghLP1jUzPSeW7N/YjJVa7QKnLp4le+YS8rATeWH2AmvomuoT537h0XWMT/1p7kN8vs1B+pp5Jg3rw6M39yEru6unQlB/QRK98Ql52En8q2MfafeWM7+/dfW87o8lmeHfzYf73oz2Unqzhur4J/GhSf0b0jvN0aMqPaKJXPmFUejxhwUEUFlv9ItEbY/h45wleXLyb3cerGJzSjeenDSE/O1Fr4ZXTOZToRWQS8FsgGHjdGPPzC9a/BEywP4wEko0xsa3Wd6O5sfgCY8zDzghcBZYuYcHkpsf5RXvBtSXl/OLDXWw8WElGYhS///IIbh3c0+e6gCnf0WGiF5Fg4BXgJqAUWC8iC40xO1q2McY80mr7bwMjLtjNz4AVTolYBay87ER++eFuTlTVktzV92ZibGyy8e03N/HBtmN07xbOC3cOYXpOKqHB2uhNuZYjR9gowGKMKTHG1ANzgSmX2H4m8GbLAxHJAboDS64kUKXy7GWWqy3lHo7k8ryx5gAfbDvGd67PYvmjE5g5qrcmeeUWjhxlKcChVo9L7csuIiJ9gAxgmf1xEPBr4IeXegERuV9EikSkqKyszJG4VQAa1CuG2MhQCnxwNsvDlTX8esluJvRP4pGb+vll5ZDyXo4k+rYGDk07284A5hljmuyPvwksMsYcamf75p0ZM8cYk2uMyU1KSnIgJBWIgoOEMZmJFFrKMKa9Q9D7GGN4+t1tGAPPThmsF1uV2zmS6EuBtFaPU4Ej7Ww7g1bDNsB1wMMish94EfiqiPy8rScq5Yi87ESOn67DcqLa06E4bPH2Y3y88wSP3JRNWrxOtazcz5Gqm/VAtohkAIdpTuZfvnAjEekPxAFrWpYZY+5utf5eINcY89gVxqwCWMs4fUGxlezu3n8z0enaBp5euJ0BPbvx9TEZng5HBagOz+iNMY3Aw8Bimksk3zLGbBeRZ0VkcqtNZwJzjS99plY+Jy0+kvSESFb5SJnlrxfv5kRVHS/cOYQQvfCqPMShOnpjzCJg0QXLnrrg8awO9vE34G+dik6pNozJSuSdTYdpaLJ5ddXKpoMn+funB7jnunSGB8hkbMo7ee9viVLtyM9O5Ex9E5sOVno6lHY1NNn4yfytdO8awQ8m9vN0OCrAaaJXPue6zESCBAqLvbcU9y+F+9h1rIpZkwfRNSLU0+GoAKeJXvmcmC6hDE2NpcBLx+kPVZzlpY/3cNPA7kwa3MPT4SiliV75pvzsRLYcquRUTYOnQzmPMYYn3tlGsAjPTB7k6XCUAjTRKx+Vl5WIzcCnJd41HcJ7nx1lxZ4yfjCxP720WYjyEprolU8a0TuOyLBgCr1oOoRTZxt45r87GJISwz2j0z0djlLn6Hz0yieFhQRxTUa8V01b/IvFu6g4U8ffvnY1wTrlsPIiekavfFZedhL7rGcoPXnW06FQtL+Cf609yNfGZDA4JcbT4Sh1Hk30ymflZzdPh+Dp4Zv6RhuPL9hKSmwXvn+T1swr76OJXvms7ORokruGe3z45k8FJew5Xs2zUwYRFa6jocr7aKJXPktEyMtKZPXecmw2z0yxtN96hpeXFnPL4B7cMKC7R2JQqiOa6JVPy8tOpOJMPTuOnnb7a7fUzIcGBzFLa+aVF9NEr3xa62mL3e2dzYcptFj50aT+dO/mez1sVeDQRK98WnK3CPp370qhxb3z3pw8U8/P3tvJ8LRY7r6mj1tfW6nO0kSvfF5ediLr95+ktqGp442d5IUPdnKqpoEX7hyiNfPK62miVz4vLzuR+kYb6/dXuOX1Pi0p562iUr6Rn8GAnt3c8ppKXQlN9MrnXZMRT2iwuKWevq6xiccXbCU1rgvfu0Fr5pVv0ESvfF5kWAgje8e55YLsq8v3UlJ2htlTB9MlLNjlr6eUMziU6EVkkojsFhGLiFzU3FtEXhKRzfavPSJSaV/eR0Q22JdvF5EHnf0DKAXNd8nuOHoaa3Wdy15jb1k1f/hkL3cM68X4/skuex2lnK3DRC8iwcArwC3AQGCmiAxsvY0x5hFjzHBjzHDgd8B8+6qjwGj78muAx0SklzN/AKWged4bwGVNw40x/HTBViJCg3jy9gEueQ2lXMWRM/pRgMUYU2KMqQfmAlMusf1M4E0AY0y9MablFCvcwddTqtOGpMQQ0yXUZYl+3oZSPi2p4LFbBpDcVWvmlW9xJPGmAIdaPS61L7uIiPQBMoBlrZalichn9n38whhzpI3n3S8iRSJSVFbmvX1AlfcKDhJGZyZQWGzFGOdOh1BeXcdzi3aS2yeOGVenOXXfSrmDI4m+rSLh9n6TZgDzjDHnCpqNMYeMMUOBLOAeEbloQhBjzBxjTK4xJjcpKcmRuJW6yJisRI6cqqXEesap+33u/Z2cqWvk+TuHEKQ188oHOZLoS4HWpzGpwEVn5XYzsA/bXMh+Jr8dyO9MgEo5yhXTFq+yWJm/6TAPjM2kX/euTtuvUu7kSKJfD2SLSIaIhNGczBdeuJGI9AfigDWtlqWKSBf793HAGGC3MwJX6kJ9EqJIi+/itDLL2oYmfrpgK+kJkTx8fZZT9qmUJ3SY6I0xjcDDwGJgJ/CWMWa7iDwrIpNbbToTmGvOHyAdAKwVkS3ACuBFY8xW54Wv1PnyspL4tKSchibbFe/rlU8s7C8/y+ypQ4gI1Zp55bsc6pJgjFkELLpg2VMXPJ7VxvM+AoZeQXxKdUp+diJvrjvIZ6WV5PSJv+z9FB+v4rUVe5k2IoU8+5CQUr5Kyx2VXxmdmYDIlU1bbLMZHl+wlajwEJ64TWvmle/TRK/8SmxkGENSYq7oguy/iw6xfv9JHr91AAnR4U6MTinP0ESv/E5eViKbDlVSVdvQ6eeeqKrlhUU7uSYjnrtyUl0QnVLup4le+Z287ESabIZPSzo/bfHs93ZS22DjuWlDENGaeeUfNNErv5PTJ44uocEUFnfuLuvlu0+wcMsRHhqfSVZytIuiU8r9NNErvxMeEsyojHgKOzHvTU19E0++u42+SVF8c0KmC6NTyv000Su/lJeVyN6yMxw9VePQ9r9dWsyhihqenzaE8BCtmVf+RRO98kstte+OlFnuPHqaPxWUcFdOKtf2TXB1aEq5nSZ65Zeu6tGVxOjwDsssbTbDT+ZvJaZLKI/fqjXzyj9pold+SUTIy0pglcWKzdb+tMX/XHuAzYcqeeK2AcRFhbkxQqXcRxO98lt52UmUn6ln17GqNtcfP13LLz/czZisBKaNaLPFglJ+QRO98lt5WfZpiy1tl1k+89/t1DXZmD1Va+aVf9NEr/xWj5gIspKj27wgu3TncRZtPcZ3rs8iIzHKA9Ep5T6a6JVfy8tKZN2+CmobzjU940xdI0+9u53s5GjuH6s188r/aaJXfi0/O5G6RhsbDpw8t+ylj/ZwuLKG5+8cQliI/goo/6dHufJr1/RNICRIzg3fbDt8ir+s2sfMUb25Ov3y56tXypdoold+LTo8hJG941hlsdJkn2c+PiqcxyZd5enQlHIbTfTK7+VlJ7LtyCl+u7SYz0pP8dQdA4mJDPV0WEq5jSZ65ffGZCViDLy8tJhx/ZK4Y2hPT4eklFs5lOhFZJKI7BYRi4g81sb6l0Rks/1rj4hU2pcPF5E1IrJdRD4TkS85+wdQqiPDUmPoGhFCRGgQs6cO1pp5FXA6bA4uIsHAK8BNQCmwXkQWGmN2tGxjjHmk1fbfBkbYH54FvmqMKRaRXsAGEVlsjKl05g+h1KWEBAfx5G0DiY4IIS0+0tPhKOV2HSZ6YBRgMcaUAIjIXGAKsKOd7WcCTwMYY/a0LDTGHBGRE0ASoIleudUXr07zdAhKeYwjQzcpwKFWj0vtyy4iIn2ADGBZG+tGAWHA3jbW3S8iRSJSVFbWua5ASimlLs2RRN/WgGZ70wHOAOYZY5paLxSRnsD/AV8zxtgu2pkxc4wxucaY3KSkJAdCUkop5ShHEn0p0PpzbypwpJ1tZwBvtl4gIt2A94EnjDGfXk6QSimlLp8jiX49kC0iGSISRnMyX3jhRiLSH4gD1rRaFgYsAP5ujHnbOSErpZTqjA4TvTGmEXgYWAzsBN4yxmwXkWdFZHKrTWcCc40xrYd1vgiMBe5tVX453InxK6WU6oCcn5c9Lzc31xQVFXk6DKWU8ikissEYk9vWOr0zViml/JwmeqWU8nNeN3QjImXAgU48JRG4uIVQ4NL343z6fnxO34vz+dv70ccY02Z9utcl+s4SkaL2xqUCkb4f59P343P6XpwvkN4PHbpRSik/p4leKaX8nD8k+jmeDsDL6PtxPn0/PqfvxfkC5v3w+TF6pZRSl+YPZ/RKKaUuQRO9Ukr5OZ9O9B21OPRnIpImIp+IyE57q8bv2pfHi8hHIlJs/zfO07G6k4gEi8gmEXnP/jhDRNba349/2yfaCwgiEisi80Rkl/04uS5Qjw8RecT+e7JNRN4UkYhAOjZ8NtG3anF4CzAQmCkiAz0blVs1Aj8wxgwArgW+Zf/5HwOWGmOygaX2x4HkuzRPvtfiF8BL9vfjJPA/HonKM34LfGiMuQoYRvP7EnDHh4ikAN8Bco0xg4FgmmfhDZhjw2cTPa1aHBpj6oGWFocBwRhz1Biz0f59Fc2/xCk0vwdv2Dd7A5jqmQjdT0RSgduA1+2PBbgemGffJGDeD3sfiLHAnwGMMfX2Xs2BenyEAF1EJASIBI4SQMeGLyd6h1sc+jsRSae5IftaoLsx5ig0/zEAkj0Xmdv9BvgR0NLFLAGotE+1DYF1jPQFyoC/2oeyXheRKALw+DDGHAZeBA7SnOBPARsIoGPDlxN9Z1oc+i0RiQb+A3zPGHPa0/F4iojcDpwwxmxovbiNTQPlGAkBRgKvGmNGAGcIgGGattivQ0yhuZ91LyCK5iHfC/ntseHLib4zLQ79koiE0pzk/2mMmW9ffNzeo7elV+8JT8XnZmOAySKyn+ZhvOtpPsOPtX9ch8A6RkqBUmPMWvvjeTQn/kA8Pm4E9hljyowxDcB8YDQBdGz4cqJ3qMWhv7KPP/8Z2GmM+d9WqxYC99i/vwd4192xeYIx5ifGmFRjTDrNx8IyY8zdwCfAdPtmgfR+HAMO2Vt8AtwA7CAwj4+DwLUiEmn/vWl5LwLm2PDpO2NF5Faaz9qCgb8YY57zcEhuIyJ5QAGwlc/HpB+neZz+LaA3zQf4XcaYCo8E6SEiMh541Bhzu4j0pfkMPx7YBHzFGFPnyfjcxd6283UgDCgBvkbzyV3AHR8i8gzwJZqr1TYB36B5TD4gjg2fTvRKKaU65stDN0oppRygiV4ppfycJnqllPJzmuiVUsrPaaJXSik/p4leKaX8nCZ6pZTyc/8ft2Hmes2I4zUAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"df.plot.line(rot=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**El porcentaje adecuado de variables es el 71%**. Con ese número de variables se tiene la mayor exactitud. Además, si se incrementa el valor (81%), se observa que la exactitud reduce. Y este valor tiene una diferencia de más del 2 por ciento que el valor inmediatamente anterior (61%)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}